【微服务框架】flask

简介

参考:

实现

# 实现一个小例子
from flask import Flask

# 创建flask实例,其中__name__为应用的名称,如果是应用程序包,则需要写程序包的名称
app = Flask(__name__)

# 使用route装饰器实现不同的url解析,从而确定什么样的url可访问函数,实质就是网页显示的后缀名
@app.route('/')
def hello_world():
    return 'Hello World!'


# 条件语句即若直接运行脚本,则执行下面的语句,若是以包的形式被调用,则以下语句不会执行
if __name__ == '__main__':
    # 运行flask web应用程序
    app.run()

执行方式运行这个服务器时,目前只能从自己的计算机上访问。如果服务器公开使用,则可通过app.run(host='0.0.0.0')让操作系统监听所有公网ip

问题

在每次修改代码后需要手动重启服务。

可以通过启动调试支持,在服务器重启后自动载入修改后的code,并且在发生错误的时候提供一个有效的调试器

# 配置应用对象
app.debug = True
app.run()

# 执行参数传入
app.run(debug=True)

问题

允许执行任意code,存在安全隐患,不能直接用在生产环境

进阶

可以通过规则定义url,目的是采用清晰的url操作相应的函数功能

# 通过后缀名区分功能
@app.route('/user/<username>')
def show_user(username):
    return 'User: {}'.format(username)

接口服务

参考:

实现

import models
from models import Customer
from flask import Flask, request, session, redirect, url_for, render_template, flash,json,jsonify
import os
app = Flask(__name__)
@app.route('/',methods = ['GET','POST'])
def enter_ID():
    if request.method == 'POST':
        Galactic_ID = request.form['Galactic_ID']
        if Customer(Galactic_ID).find():
            return redirect(url_for('relationships',ID=request.form.get('Galactic_ID')))
        else:
            return "Wrong Galactic_ID"
    else:
       return render_template('Gal.html')

@app.route('/Customer_relationships',defaults={'ID':'Galactic_ID'},methods=['GET','POST'])
@app.route('/Customer_relationships/<ID>',methods=['GET','POST'])
def relationships(ID):
    data = Customer(ID).get_relationships()
    return  render_template('rel.html',data= json.dumps(data))


if __name__ == '__main__':
    host = os.getenv('IP','0.0.0.0')
    port = int(os.getenv('PORT',5000))
    app.secret_key = os.urandom(24)
    app.run(host=host,port=port)
import requests,json

req = '{"cust":123, "seeds_path":"liuyan22/lookalike/seeds/tmp_liuyan22_system_lookalike_seed_novel", "extend": 5}'
url = 'http://127.0.0.1:5000/'
r = requests.post(url,data=json.dumps(req))
print(r.json())
 curl -H "Content-Type:application/json; charset=UTF-8;Data_Type:msg" -X POST --data '{"cust":123, "seeds_path":"liuyan22/lookalike/seeds/tmp_liuyan22_system_lookalike_seed_novel", "extend": 5}' 'http://10.41.20.196:5000/seeds_extend/'

报错

  • "POST / HTTP/1.1" 404 原因:请求地址不存在 解决:在代码中存在路径后缀,在发送请求的时候访问的url没有加后缀
  • socket.gaierror: [Errno -2] Name or service not known 原因:app.run()时host配置为0.0.0.0
  • socket.gaierror: [Errno 8] nodename nor servname provided, or not known
  • PermissionError: [Errno 13] Permission denied
  • "POST /seeds_extend HTTP/1.1" 500 原因:函数有问题[外部参数的传参;发送请求时,url必须以/结尾] 解决:检查代码逻辑

results matching ""

    No results matching ""